不知道讀者們有沒有需要在網頁開啟自家App的需求
如果是自己開發的App問題應該不大,ios 以及 android 都設定一樣的開啟連結即可
開啟連結有個專有名詞叫做 URL Schemes
如果希望在line分享連結的話,建議是跳去瀏覽器開比較容易成功引導頁.html?openExternalBrowser=1
=> 在引導頁做個按鈕來開啟自家App
還有另一種方式是透過Firebase跳轉
ex: https://maps.app.goo.gl
為什麼開頭會說網頁開啟 App 其實很麻煩?
因為隨著軟體不斷改版,作業系統不斷更新,連結不一定都可以一直使用
以前可以使用youtube://
開啟YT但是現在不行了
不同作業系統URL Schemes
也可能不同,看各廠商自己定義
data-url="comgooglemaps://"
data-name="Google Maps"
data-website="http://maps.google.com/maps"
重點1: 透過button上的參數控制開啟的連結
重點2: 透過昨天學的visibilitychange
判斷網頁是否跳轉成功
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>打開 App</title>
<style>
body {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
button {
padding: 10px 20px;
font-size: 18px;
cursor: pointer;
margin-bottom: 20px;
}
#message {
text-align: center;
display: none;
}
</style>
</head>
<body>
<h3>試著用不同的手機瀏覽點按鈕,嘗試開啟App</h3>
<button
id="openYouTubeApp1"
data-url="youtube://"
data-name="YouTube"
data-website="https://www.youtube.com/"
>
打開 youtube://📱 https://www.youtube.com/
</button>
<button
id="openGoogleMapApp1"
data-url="comgooglemaps://"
data-name="Google Maps"
data-website="http://maps.google.com/maps"
>
打開 comgooglemaps://📱 http://maps.google.com/maps
</button>
<button
id="openIgApp1"
data-url="instagram://app"
data-name="instagram"
data-website="https://www.instagram.com/"
>
打開 instagram://app📱 https://www.instagram.com/
</button>
<div id="message"></div>
<script>
const messageElement = document.getElementById("message");
const main = (e) => {
const appUrl = e.target.dataset.url;
const appName = e.target.dataset.name;
const appWebsite = e.target.dataset.website;
let appOpenedSuccessfully = false;
// 添加一個事件監聽器來檢測頁面是否變為不可見(表示應用程序已打開)
document.addEventListener("visibilitychange", () => {
if (document.hidden) {
appOpenedSuccessfully = true;
showMessage(`${appName} 應用程序已成功打開!`);
}
});
// openYouTube
try {
showMessage(`嘗試打開 ${appName} App ...`);
jump(appUrl);
// 2秒後檢查
setTimeout(() => {
if (!appOpenedSuccessfully) {
showMessage(`無法打開 ${appName} App 3秒後跳轉...`, true);
setTimeout(() => jump(appWebsite), 3000);
}
}, 2000);
} catch (error) {
console.error("發生錯誤:", error);
showMessage(`嘗試打開 ${appName} 時發生錯誤`, true);
}
};
openYouTubeApp1.addEventListener("click", main);
openGoogleMapApp1.addEventListener("click", main);
openIgApp1.addEventListener("click", main);
function showMessage(text, isError = false) {
messageElement.textContent = text;
messageElement.style.color = isError ? "red" : "green";
messageElement.style.display = "block";
}
function jump(url) {
window.location.href = url;
}
</script>
</body>
</html>